package com.zw.transition.mapper;

import com.zw.transition.entity.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.Date;
import java.util.List;

/**
 * @Description:
 * @Author: China.sgl
 * @Date: 2019/9/16 09:11
 */
@Repository
public interface FlowMapper {


    List<FlowTrans> findApplyList(QrParse parse);

    List<FlowTrans> findApplyListByAssembling(QrParse parse);

    List<FlowTrans> findApplyListByRepair(QrParse parse);

    List<FlowRoute> findCompleteApplyList(QrParse parse);

    List<FlowRoute> findCompleteApplyList1(QrParse parse);

    List<FlowRoute> findCompleteApplyList2(QrParse parse);

    List<FlowTrans> findRecList(QrParse parse);

    List<FlowTrans> findRecListListByRepair(QrParse parse);

    List<FlowTrans> findCheckList(QrParse parse);

    List<FlowTrans> findCheckListByRepair(QrParse parse);

    FlowSheet findSheet(QrParse parse);

    List<FlowTrans> findHisApplyList(String code,String prodNo,String drawNo);

    List<FlowTrans> findHisApplyListOld(String code,String prodNo,String drawNo);

    FlowTrans getHisApplyPrimaryKey(@Param("id") Integer id);

    List<FlowTrans> findHisRecList(String code,String prodNo,String drawNo);
    List<FlowTrans> findHisRecListOld(String code,String prodNo,String drawNo);

    FlowTrans getHisRecByTransId(@Param("id") Integer id);

    List<FlowTrans> findHisCheckList(@Param("checkCode") String checkCode,@Param("prodNo") String prodNo,@Param("drawNo") String drawNo);
    List<FlowTrans> findHisCheckListOld(@Param("checkCode") String checkCode,@Param("prodNo") String prodNo,@Param("drawNo") String drawNo);
    /**
     * 获取划线质检通过的,下序没接收的。
     * @param prodNo
     * @param drawNo
     * @return
     */
    List<FlowTrans> findHisCheckListByMarkingOff(@Param("checkCode") String checkCode,@Param("prodNo") String prodNo,@Param("drawNo") String drawNo);
    FlowTrans getHisCheckByTransId(@Param("id") Integer id);

    int addTrans(FlowTrans trans);

    int updateRouteApply(FlowRoute route);
    int updateCancelRouteApply(FlowRoute route);

    int updateProcessApply(FlowProcess trans);

    int updateRouteApplyToCancelApply(FlowRoute route);

    FlowTrans getTrans(Integer id);

    int updateRecTrans(FlowTrans trans);

    FlowRoute findNextRoute(FlowRoute route);

    FlowProcess getNextProcess(FlowProcess process);

    FlowProcess getLastProcess(FlowProcess process);

    FlowRoute getNextRoute(FlowRoute route);

    int updateRouteRecNum(FlowRoute route);

    int updateProcessRecNum(FlowProcess route);

    FlowRoute findCurRoute(FlowTrans trans);

    FlowProcess findCurProcess(FlowTrans trans);

    int updateCheckTrans(FlowTrans trans);

    int updateRouteCheck(FlowRoute cur);

    int updateRejectTrans(FlowTrans t);

    FlowSheet getSheet(FlowRoute route);

    int updateSheetInvalid(FlowSheet sheet);

    int insertHalfStore(HalfStore store);

    int updateTransStatus(@Param("id") Integer id, @Param("status") Integer status);

    int updateTransIsdel(@Param("id") Integer id, @Param("isDel") Integer isDel);

    int updateRouteDel(FlowRoute route);
    int updateProcessDel(FlowProcess route);

    int delHalfStore(Integer id);

    /**
     * @methodName: findNextRouteByDump
     * @description: 获取转储
     * @param: cur
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/16 13:15
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute findNextRouteByDump(FlowRoute cur);

    /**
     * @methodName: getFirstRoute
     * @description: 获取第一道序
     * @param: cur
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/16 13:43
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getFirstRoute(FlowRoute cur);

    /**
     * @methodName: getLastRoute
     * @description: 获取最后一道序
     * @param: cur
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/16 13:56
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getLastRoute(FlowRoute cur);

    /**
     * @methodName: getFlowRouteByPeimaryKey
     * @description: 根据主键获取路线
     * @param: id
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/21 13:34
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getFlowRouteByPrimaryKey(Integer id);

    /**
     * @methodName: deleteTrans
     * @description: TODO
     * @param: trans
     * @return： void
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/24 11:27
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    int deleteTrans(FlowTrans trans);

    /**
     * @methodName: getNextFlowRouteByBefore
     * @description: 根据上序获取下序
     * @param: currentFlowRoute
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/24 13:39
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getNextFlowRouteByBefore(FlowRoute currentFlowRoute);

    /**
     * @methodName: getExistHalfStore
     * @description: 获取已存在的
     * @param: store
     * @return： com.zw.transition.entity.HalfStore
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:49
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    HalfStore getExistHalfStore(HalfStore store);

    /**
     * @methodName: updateHalfStoreDrawNumByPrimary
     * @description: 修改数量
     * @param: existHalfStore
     * @return： int
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:50
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    int updateHalfStoreNumByPrimary(HalfStore existHalfStore);

    /**
     * @methodName: updateHalfStoreDrawNumByPrimary
     * @description: 修改数量
     * @param: existHalfStore
     * @return： int
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:50
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    void insertAsseHalfStoreRecord(AsseHalfStoreRecord record);

    /**
     * @methodName: getAsseHalfStoreRecordByPrimaryKey
     * @description: 获取对应的记录
     * @param: recordId
     * @return： com.zw.transition.entity.AsseHalfStoreRecord
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:57
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    AsseHalfStoreRecord getAsseHalfStoreRecordByPrimaryKey(Integer recordId);

    /**
     * @methodName: getHalfStore
     * @description: 获取库存
     * @param: record
     * @return： com.zw.transition.entity.HalfStore
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:58
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    HalfStore getHalfStore(AsseHalfStoreRecord record);

    /**
     * @methodName: updateRouteRouteDate
     * @description: 更新最新转序时间
     * @param: next
     * @return： int
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/12 16:09
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    int updateRouteRouteDate(FlowRoute next);

    /**
     * @methodName: getFirstFlowTransBySheetId
     * @description: 获取首道序的转序单
     * @param: sheetId
     * @return： com.zw.transition.entity.FlowTrans
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/21 13:02
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowTrans getFirstFlowTransBySheetId(@Param("sheetId") Integer sheetId);

    /**
     * @methodName: getFirstFlowRouteBySheetId
     * @description: 获取第一道序
     * @param: sheetId
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/21 13:10
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getFirstFlowRouteBySheetId(@Param("sheetId") Integer sheetId);

    /**
     * 获取该路线的第一道工序（非删除）
     * @param sheetId
     * @param routeId
     * @return
     */
    FlowProcess getFirstFlowProcessBySheetIdAndRouteId(@Param("sheetId") Integer sheetId,@Param("routeId") Integer routeId);

    /**
     * @methodName: updateRoute
     * @description: 更新路线
     * @param: next
     * @return： int
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/28 11:08
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    int updateRoute(FlowRoute next);

    /**
     * 获取该序数量
     *
     * @param route
     * @param prodNo
     * @return
     */
    int getRoteCountBySheetId(@Param("route") String route,@Param("prodNo") String prodNo);

    /**
     * 获取该序完成数量
     *
     * @param route
     * @param prodNo
     * @return
     */
    int getRoteCompleteCountBySheetId(@Param("route") String route,@Param("prodNo") String prodNo);

    /**
     * 获取开始时间
     *
     * @param prodNo
     * @param protCod
     * @return
     */
    Date getDataBaseStartDate(@Param("prodNo") String prodNo, @Param("protCod") String protCod);

    /**
     * 更改开始时间
     *
     * @param prodNo
     * @param protCod
     * @param startDate
     */
    int updateTaskStatusAndStartDat(@Param("prodNo") String prodNo,
                                     @Param("protCod") String protCod,
                                     @Param("protStaDat") Date startDate,
                                     @Param("protDepId") Integer protDepId,
                                     @Param("protUsrId") Integer protUsrId);

    /**
     * 更改结束时间
     * @param prodNo
     * @param protCod
     * @param endDate
     * @param protDepId
     * @param protUsrId
     */
    int updateTaskStatusAndEndDat(@Param("prodNo") String prodNo,
                                   @Param("protCod") String protCod,
                                   @Param("protEndDat") Date endDate,
                                   @Param("protDepId") Integer protDepId,
                                   @Param("protUsrId") Integer protUsrId);

    /**
     * 更改反馈结束时间
     * @param prodNo
     * @param prprCod
     * @param prprRetDat
     * @param prprDepId
     * @param prprRetUsrId
     * @return
     */
    int updateReturnEndDate(@Param("prodNo") String prodNo,
                            @Param("prprCod") String prprCod,
                            @Param("prprRetDat") Date prprRetDat,
                            @Param("prprDepId") Integer prprDepId,
                            @Param("prprRetUsrId") Integer prprRetUsrId);

    /**
     * 获取总数量
     * @param sheet
     * @return
     */
    int getLastRouteTotalCount(FlowSheet sheet);

    /**
     * 获取完成的总数量
     * @param sheet
     * @return
     */
    int getLastRouteTotalFinishedCount(FlowSheet sheet);

    /**
     * 依据主键获取用户表
     * @param id
     * @return
     */
    User getUserById(Integer id);
    /**
     * 依据主键修改下料状态
     * @param flowSheet
     * @return
     */
    int updateFlowSheetCutStatusByPrimary(FlowSheet flowSheet);

    /**
     * 获取该路线的最后一道工序
     * @param curProcess
     * @return
     */
    FlowProcess getCurrentRouteLastProcess(FlowProcess curProcess);

    /**
     * 获取该路线的当前序的下一序
     * @param curProcess
     * @return
     */
    FlowProcess findNextProcess(FlowProcess curProcess);

    /**
     * 根据主键获取 FlowSheet
     * @param sheetId
     * @return
     */
    FlowSheet getFlowSheetByPrimaryKey(@Param("id") Integer sheetId);

    /**
     * 根据转序单ID获取质检信息
     * @param transId
     * @return
     */
    FlowCheck getFlowCheckByTransId(@Param("transId") Integer transId);

    /**
     * 根据主键更新质检驳回信息
     * @param check
     * @return
     */
    int updateFlowCheckForRejectByPrimaryKey(FlowCheck check);
    /**
     * 根据主键更新质检合格信息
     * @param check
     * @return
     */
    int updateFlowCheckForSuccessByPrimaryKey(FlowCheck check);
    /**
     * 插入质检驳回信息
     * @param check
     * @return
     */
    int insertFlowCheckForRejectByPrimaryKey(FlowCheck check);
    /**
     * 插入质检合格信息
     * @param check
     * @return
     */
    int insertFlowCheckForSuccessByPrimaryKey(FlowCheck check);

    /**
     * 根据主键更新转序单状态
     * @param trans
     * @return
     */
    int updateFlowTransStatusByPrimaryKey(FlowTrans trans);

    /**
     * 根据route_id 和 process 和 order_num获取工序信息
     * @param routeId 路线ID
     * @param process 工序名
     * @param orderNum 工序序号
     * @return
     */
    FlowProcess getFlowProcessByRouteIdAndProcessAndOrderNum(Integer routeId, String process, Integer orderNum);

    /**
     * 更新该工序转序信息
     * @param curProcess
     * @return
     */
    int updateProcessCheck(FlowProcess curProcess);

    /**
     * 因撤销质检更新转序单表数据
     * @param t
     * @return
     */
    int updateFlowTransByCancelCheck(FlowTrans t);

    /**
     * 删除质检附件表数据
     * @param deleteUpdateCheckAttachmentsObj
     * @return
     */
    int updateCheckAttachmentsByDelete(FlowCheckAttachments deleteUpdateCheckAttachmentsObj);

    /**
     * 删除质检表数据
     * @param flowCheck
     * @return
     */
    int updateFlowCheckByByDelete(FlowCheck flowCheck);

    /**
     * 根据主键更新路线是否可以变更
     * @param cur
     * @return
     */
    int updateFlowRouteCanChangeByPrimaryKey(FlowRoute cur);

    /**
     * 根据路线id和序号获取车间级转序（不包含删除）
     * @param routeId
     * @return
     */
    FlowProcess getFlowProcessByRouteIdAndOrderNum(@Param("routeId") Integer routeId);

    /**
     * 根据质检表主键获取质检附件信息
     * @param checkId
     * @return
     */
    List<FlowCheckAttachments> findFlowCheckAttachmentsByCheckId(@Param("checkId") Integer checkId);

    /**
     * 根据主键更新质检意见
     * @param check
     * @return
     */
    int updateFlowCheckReasonByPrimaryKey(FlowCheck check );

    /**
     * 根据主键获取质检表数据
     * @param checkId
     * @return
     */
    FlowCheck getFlowCheckByPrimaryKey(@Param("id") Integer checkId);

    /**
     * 插入质检附件表数据
     * @param checkAttachments
     * @return
     */
    int insertFlowCheckAttachments(FlowCheckAttachments checkAttachments);

    /**
     * 根据质检id和附件名称 获取非删除的数据
     * @param checkId
     * @param attFileName
     * @return
     */
    FlowCheckAttachments getFlowCheckAttachmentsByCheckIdAndAttFileName(@Param("checkId") Integer checkId,
                                                                        @Param("attFileName") String attFileName);

    /**
     * 根据质检id和附件名称删除附件
     * @return
     */
    int deleteFlowCheckAttachmentsByCheckIdAndAttFileName(FlowCheckAttachments flowCheckAttachments);

    AssemblyStore findStoreBySheetId(@Param("sheetId") Integer sheetId);

    int updateStore(AssemblyStore store);

    int insertStore(AssemblyStore store);

    int insertStoreRecord(AssemblyStoreRecord storeRecord);

    int updateSheetTrans(FlowTrans trans);

    /** 取得机械和流体未完成工艺卡装配数 */
    Integer getJxLtNotTranCompCount(String prodNo,Integer sheetId);

    /** 更新生产令装配任务状态 */
    int updateProdTasProtStaByProdNo(ProdTasStatus prodTas);

    /** 更新生产令装配任务开始时间及状态 */
    int updateProdTasStartProtStaByProdNo(ProdTasStatus prodTas);

    /**
     * @param prodNo 生产令编号
     * @Author wsg
     * @Date 13:29 2021/6/8
     * @Description 取得生产令生产、装配、安装状态
     **/
    ProdTasStatus getProdTasStatusByProdNo(String prodNo);

    /**
     * @param prodNo 生产令编号
     * @param status 状态 0=未完成，1=已完成
     * @Author wsg
     * @Date 13:29 2021/6/8
     * @Description 更新生产令生产完成状态
     **/
    Integer udpCodStaAndDate(@Param("prodNo") String prodNo, @Param("status") Integer status, @Param("comDat") Date comDat);

    AssemblyStoreRecord findStoreRecordById(Integer recordId);

    void udpAsseStoreBySheetId(AssemblyStore asseStore);

    /**
     * 获取被删除的附件列表
     * @return
     */
    List<FlowCheckAttachments> findFlowCheckAttachmentsByRemove();

    /**
     * 根据转序单信息获取路线
     * @param trans
     * @return
     */
    FlowRoute getFlowRouteByTrans(FlowTrans trans);
    /**
     * 根据 工艺卡主键、路线表主键、工序主键获取对应的电子转序单数据
     * @param sheetId
     * @param routeId
     * @param processId
     * @return
     */
    FlowTrans getFlowTransBySheetIdAndRouteIdAndProcessId(@Param("sheetId") Integer sheetId,
                                                          @Param("routeId") Integer routeId,
                                                          @Param("processId") Integer processId);
    /**
     * 根据 工艺卡主键、路线表主键、工序主键获取对应的电子转序单数据
     * @param sheetId
     * @return
     */
    FlowTrans getFlowTransBySheetIdForRepair(@Param("sheetId") Integer sheetId);

    /**
     * 根据主键获取转序单
     * @param id
     * @return
     */
    FlowTrans getFlowTransByPrimaryKey(@Param("id") Integer id);

    /**
     * 删除电子转序单
     * @param flowTrans
     * @return
     */
    int updateFlowTransIsdel(FlowTrans flowTrans);

    int updateRouteStatusNotStarted(@Param("routeId") Integer id);

    /**
     * 根据主键获取车间级 工序数据 非删除
     * @param id
     * @return
     */
    FlowProcess getFlowProcessByPrimaryKey(@Param("id") Integer id);

    int updateRouteApplyToCancelApplyByProcess(FlowProcess flowProcess);

    Integer updateProjectInfoStatus(@Param("prodNo") String prodNo, @Param("status") Integer status, @Param("comDat") Date comDat);
    /**
     * 根据转序单去找车间级转序工序的序号
     * @param currentTrans
     * @return
     */
    FlowProcess getFlowProcessBySheetInfoAndRouteInfoAndProcessInfo(FlowTrans currentTrans);

    /**
     * 获取当前路线的头一道工序
     * @param nextRoute
     * @return
     */
    FlowProcess findCurRouteFirstProcess(FlowRoute nextRoute);

    List<FlowTrans> findCheckListByAssembling(QrParse parse);
}
